import { defineStore } from "pinia";

interface TodoItem {
  id: number;
  title: string;
  isDone: boolean;
}

type TodoList = TodoItem[];

interface CounterStore {
  count: number;
  age: number;
  todoList: TodoList;
}

export const useCounterStore = defineStore(
  "counter", // 模块名称：将来会在开发者调试工具中显示
  {
    // state必须写成函数形式，函数必须返回一个对象
    // 对象就是整个模块管理的数据
    state: (): CounterStore => {
      return {
        // 基本类型不需要定义类型
        count: 0,
        age: 18,
        // 但是一旦有引用数据类型，就需要定义类型
        todoList: [],
      };
    },
    // 只读的计算属性数据
    getters: {
      oddOrEven(state) {
        // return state.count % 2 === 1 ? "奇数" : "偶数";
        return (state.count & 1) === 1 ? "奇数" : "偶数";
      },
    },

    // 所有更新都要在action中完成
    actions: {
      // action接受n个参数，这n个参数都是外面传递的参数
      increment(...args: number[]) {
        console.log(args);
        // 所有数据（state、getters、actions）都进行了数据代理，代理到this上，所以可以通过this直接访问
        this.count++;
      },
    },

    // pinia移除了mutation
    // mutations: {}
  }
);
